import api from '../api/index'
const state = {
  cache: {},
  user: {}
  // regions: []
}
const getters = {
  // companyId (state) {
  //   return state.user?.companys?.[0]?.id
  // },
  // company (state) {
  //   return state.user?.companys?.[0] || {}
  // },
  userInfo (state) {
    return state.user?.user || {}
  }
}
const mutations = {
  setUser (state, params) {
    state.user = params
  }
  // setRegions (state, params) {
  //   state.regions = params
  // }
}
const actions = {
  login (context, params) {
    return api.system.login(params)
  },
  captcha (context, param) {
    return api.system.captcha(param, { responseType: 'arraybuffer' })
  },
  logout (context, params) {
    return api.system.logout(params)
  },
  changePwd (context, params) {
    return api.system.changePwd(params)
  },
  // 获取用户信息， 菜单，资源
  async getUserInfo (context, params) {
    const { data } = await api.system.getUserInfo(params)
    if (data) {
      if (!data.userInfo.user) {
        // return router.replace('/login')
      }
      const userInfo = data.userInfo
      const menus = data.menus
      const resources = data.resources.map(item => item.action)
      const user = userInfo.user || {}
      userInfo.navUserName = user.realName
      if (Array.isArray(userInfo.roles)) {
        userInfo.navRoleName = userInfo.roles
          // .filter(item => item.roleCode !== 'Super_001')
          // .slice(0, 1)
          .map(r => r.roleName).join(',')
      }
      context.commit('setUser', userInfo)
      return { data: { menus, resources, userInfo } }
    }
    return {}
  },
  // 用户分页
  userPage (context, params) {
    return api.system.userPage(params)
  },
  userPageByOrgId (context, params) {
    return api.system.userPageByOrgId(params)
  },
  // 用户详情
  userGetById (context, params) {
    return api.system.userGetById(params)
  },
  // 用户保存
  userSave (context, params) {
    console.info('params: ' + params.id)
    if (params.id) {
      return api.system.userUpdate(params)
    } else {
      return api.system.userSave(params)
    }
  },
  // 用户删除
  userDelete (context, params) {
    return api.system.userDel(params)
  },
  // 批量删除
  deleteBatch (context, params) {
    return api.system.deleteBatch(params)
  },
  // 重置密码
  resetPwd (context, params) {
    return api.system.resetPwd(params)
  },
  // 启用、停用用户
  userFrozen (context, params) {
    return api.system.userFrozen(params)
  },
  // 根据角色ID查询用户角色关系
  queryUserRoleByRoleId (context, params) {
    return api.system.queryUserRoleByRoleId(params)
  },
  // 根据角色ID保存角色与用户关系
  saveUserRoleByRoleId (context, params) {
    return api.system.saveUserRoleByRoleId(params)
  },
  getRolesByUserId (context, params) {
    return api.system.getRolesByUserId(params)
  },
  getRolesByPositionId (context, params) {
    return api.system.getRolesByPositionId(params)
  },
  // 角色分页
  rolePage (context, params) {
    return api.system.rolePage(params)
  },
  // 角色详情
  roleDetail (context, params) {
    return api.system.roleDetail(params)
  },
  // 字典保存
  roleInsert (context, params) {
    return api.system.roleInsert(params)
  },
  roleUpdate (context, params) {
    return api.system.roleUpdate(params)
  },
  // 角色删除
  roleDel (context, params) {
    return api.system.roleDel(params)
  },
  // 所有角色信息
  roleAll (context, params) {
    return api.system.getAllRole(params)
  },
  // 根据角色ID查询权限关系
  queryRolePermsByRoleId (context, params) {
    return api.system.queryRolePermsByRoleId(params)
  },
  // 根据角色ID保存角色与权限关系
  saveRolePermission (context, params) {
    return api.system.saveRolePermission(params)
  },
  async getDict (context, params) {
    if (!context.state.cache[params]) {
      context.state.cache[params] = api.system.getAllDictItem(params, { hideError: true })
    }
    if (!Array.isArray(context.state.cache[params])) {
      const { data } = await context.state.cache[params]
      if (data) {
        context.state.cache[params] = (data || []).map(item => ({ label: item.itemKey, value: item.itemValue }))
      }
    }
    return context.state.cache[params]
  },
  // 字典分页
  dictPage (context, params) {
    return api.system.dictPage(params)
  },
  // 字典详情
  dictDetail (context, params) {
    return api.system.getDictById(params)
  },
  // 字典保存
  dictInsert (context, params) {
    return api.system.dictInsert(params)
  },
  dictUpdate (context, params) {
    return api.system.dictUpdate(params)
  },
  // 字典删除
  dictDel (context, params) {
    return api.system.dictDelete(params)
  },
  // 字典分页
  dictItemPage (context, params) {
    return api.system.dictItemPage(params)
  },
  // 字典详情
  dictItemDetail (context, params) {
    return api.system.getDicItemtById(params)
  },
  // 字典保存
  dictItemInsert (context, params) {
    return api.system.dictItemInsert(params)
  },
  dictItemUpdate (context, params) {
    return api.system.dictItemUpdate(params)
  },
  // 字典删除
  dictItemDelete (context, params) {
    return api.system.dictItemDelete(params)
  },
  getDictItemCode (context, params) {
    return api.system.getDictItemCode(params)
  },
  getDictItemCodes (context, params) {
    return api.system.getDictItemCodes(params)
  },
  getAllDictItem (context, params) {
    return api.system.getAllDictItem(params)
  },
  getPermListByParentId (context, params) {
    return api.system.getPermListByParentId(params)
  },
  /** 权限资源新增 */
  permsInsert (context, params) {
    return api.system.permsInsert(params)
  },
  /** 权限资源修改 */
  permsUpdate (context, params) {
    return api.system.permsUpdate(params)
  },
  /** 权限资源删除 */
  permsDelete (context, params) {
    return api.system.permsDelete(params)
  },
  /** 组织机构新增 */
  getOrgByParentId (context, params) {
    return api.system.getOrgByParentId(params)
  },
  /** 组织机构新增 */
  orgInsert (context, params) {
    return api.system.orgInsert(params)
  },
  /** 组织机构修改 */
  orgUpdate (context, params) {
    return api.system.orgUpdate(params)
  },
  /** 组织机构删除 */
  orgDelete (context, params) {
    return api.system.orgDelete(params)
  },
  /** 组织机构列表 */
  orgPage (context, params) {
    return api.system.orgPage(params)
  },
  orgGetById (context, params) {
    return api.system.orgGetById(params)
  },
  /** 组织机构类型新增 */
  orgTypeInsert (context, params) {
    return api.system.orgTypeInsert(params)
  },
  /** 组织机构修改 */
  orgTypeUpdate (context, params) {
    return api.system.orgTypeUpdate(params)
  },
  /** 组织机构类型删除 */
  orgTypeDelete (context, params) {
    return api.system.orgTypeDelete(params)
  },
  /** 组织机构类型列表 */
  orgTypePage (context, params) {
    return api.system.orgTypePage(params)
  },
  /** 根据组织机构类型ID查询对象 */
  orgTypeGetById (context, params) {
    return api.system.orgTypeGetById(params)
  },
  /** 组织机构类型列表 */
  orgTypeList (context, params) {
    return api.system.orgTypeList(params)
  },

  /** 职务新增 */
  titleInsert (context, params) {
    return api.system.titleInsert(params)
  },
  /** 职务修改 */
  titleUpdate (context, params) {
    return api.system.titleUpdate(params)
  },
  /** 职务删除 */
  titleDelete (context, params) {
    return api.system.titleDelete(params)
  },
  /** 职务列表 */
  titlePage (context, params) {
    return api.system.titlePage(params)
  },
  /** 根据职务ID查询对象 */
  titleGetById (context, params) {
    return api.system.titleGetById(params)
  },
  /** 职务列表 */
  titleList (context, params) {
    return api.system.titleList(params)
  },
  /** 职务列表 */
  getAllTitle (context, params) {
    return api.system.getAllTitle(params)
  },
  /** 岗位新增 */
  positionInsert (context, params) {
    return api.system.positionInsert(params)
  },
  /** 岗位修改 */
  positionUpdate (context, params) {
    return api.system.positionUpdate(params)
  },
  /** 岗位删除 */
  positionDelete (context, params) {
    return api.system.positionDelete(params)
  },
  /** 岗位列表 */
  positionPage (context, params) {
    return api.system.positionPage(params)
  },
  /** 根据岗位ID查询对象 */
  positionGetById (context, params) {
    return api.system.positionGetById(params)
  },
  /** 用于选择岗位列表 */
  selectPositionPage (context, params) {
    return api.system.selectPositionPage(params)
  }

}

export default { namespaced: true, state, mutations, actions, getters }
